嵌入式外设

您所在的位置:网站首页 rgbc ir传感器 嵌入式外设

嵌入式外设

2024-07-11 01:51:49| 来源: 网络整理| 查看: 265

目录

一、前言

产品参数

二、资料获取

关注微信公众号--星之援工作室 发送关键字(TCS34725)

三、设备使用 

接线

图片演示

视频演示

四、代码编写

main.c

tcs3472.h

tcs3472.c

 五、参考

一、前言

TCS34725是一款颜色传感器模块,可以用来检测物体的颜色。它使用红、绿、蓝三种颜色的光传感器来识别物体的颜色,并且可以将颜色数据转换成数字信号输出。这个模块通常用于各种颜色检测和识别应用,比如RGB LED灯控制、颜色排序机器人等。

TCS34725模块有着简单的接口,可以通过Arduino、树莓派等单片机进行控制。它能够识别多种颜色,并且可以调整集成的增益和积分时间来适应不同亮度和颜色条件下的检测需求。

使用TCS34725模块进行颜色检测通常包括以下步骤: 1. 初始化模块:设置增益、积分时间等参数。 2. 读取传感器数据:通过读取模块输出的数字信号,获取红、绿、蓝三种颜色的数值。 3. 分析颜色数据:根据传感器输出的数值,判断物体的颜色类型或者进行进一步的颜色处理。 4. 根据需求进行相应操作:比如控制LED灯的颜色、记录颜色数据、或者触发其他动作。

总的来说,TCS34725颜色传感器模块是一款功能强大、使用方便的颜色检测工具,可以广泛应用于各种颜色识别和控制场景中。

7eb0258112c5466b86ce70e502602271.png

产品参数

工作电压:3.3V/5V 控制芯片:TCS3472XFN 逻辑电压:3.3V/5V 通信接口:I2C2d66f7e1281349bab30c26ce4363fcdc.png

二、资料获取 关注微信公众号--星之援工作室 发送关键字(TCS34725)

自己重新写了一遍控制部分,并添加了反馈效果演示

➡️🫡🫡🫡🫡🫡🫡🫡🫡➡️452c0cf75b1d4e4895194df8a5022c34.png

三、设备使用  接线

接线方式如下,可根据个人喜好进行引脚的切换

图片演示

fc2aab7daa674282bbaf818216155b05.jpeg

视频演示

悬空会自动反馈光谱最大的值进行显示

颜色识别

四、代码编写 main.c

实现函数调用

/*接线 星之援学习资料 颜色识别 VCC------------>供电 DIO------------>PB9 SCLK------------>PB8 LOAD------------>PB7 GND------------>接地 RGB R ---- PC15 B ---- PC14 G ---- PC13 可以根据识别到的颜色值进行亮灯提示 */ #include "stm32f10x.h" #include "delay.h" #include "led.h" #include "key.h" #include "usart.h" #include "tcs3472.h" int main(void) { u16 time_cnt =0; u8 rgb_max; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 // LED 端口初始化 LED_GPIO_Config(); // 串口初始化 uart_init(115200); // 颜色识别 TCS34725_Init(); printf("init ok\n"); while ( 1 ) { time_cnt++; if(time_cnt %50 == 0){ TCS34725_GetRawData(&rgb); //读两次,实际测试时发现读到的颜色总是上一次的颜色 RGBtoHSL(&rgb,&hsl); // 反馈最大 rgb_max = max3v(rgb.r,rgb.g,rgb.b); if(rgb_max == rgb.r){ LED_RED } else if(rgb_max == rgb.g){ LED_GREEN } else if(rgb_max == rgb.b){ LED_BLUE } printf("R=%d G=%d B=%d C=%d\r\n",rgb.r,rgb.g,rgb.b,rgb.c); printf("H=%d S=%d L=%d\r\n",hsl.h,hsl.s,hsl.l); } delay_ms(10); } } tcs3472.h #ifndef __TCS_H #define __TCS_H #include "stm32f10x.h" /******************************************************************************/ #define TCS34725_ADDRESS (0x29) #define TCS34725_COMMAND_BIT (0x80) #define TCS34725_ENABLE (0x00) #define TCS34725_ENABLE_AIEN (0x10) /* RGBC Interrupt Enable */ #define TCS34725_ENABLE_WEN (0x08) /* Wait enable - Writing 1 activates the wait timer */ #define TCS34725_ENABLE_AEN (0x02) /* RGBC Enable - Writing 1 actives the ADC, 0 disables it */ #define TCS34725_ENABLE_PON (0x01) /* Power on - Writing 1 activates the internal oscillator, 0 disables it */ #define TCS34725_ATIME (0x01) /* Integration time */ #define TCS34725_WTIME (0x03) /* Wait time (if TCS34725_ENABLE_WEN is asserted) */ #define TCS34725_WTIME_2_4MS (0xFF) /* WLONG0 = 2.4ms WLONG1 = 0.029s */ #define TCS34725_WTIME_204MS (0xAB) /* WLONG0 = 204ms WLONG1 = 2.45s */ #define TCS34725_WTIME_614MS (0x00) /* WLONG0 = 614ms WLONG1 = 7.4s */ #define TCS34725_AILTL (0x04) /* Clear channel lower interrupt threshold */ #define TCS34725_AILTH (0x05) #define TCS34725_AIHTL (0x06) /* Clear channel upper interrupt threshold */ #define TCS34725_AIHTH (0x07) #define TCS34725_PERS (0x0C) /* Persistence register - basic SW filtering mechanism for interrupts */ #define TCS34725_PERS_NONE (0b0000) /* Every RGBC cycle generates an interrupt */ #define TCS34725_PERS_1_CYCLE (0b0001) /* 1 clean channel value outside threshold range generates an interrupt */ #define TCS34725_PERS_2_CYCLE (0b0010) /* 2 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_3_CYCLE (0b0011) /* 3 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_5_CYCLE (0b0100) /* 5 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_10_CYCLE (0b0101) /* 10 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_15_CYCLE (0b0110) /* 15 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_20_CYCLE (0b0111) /* 20 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_25_CYCLE (0b1000) /* 25 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_30_CYCLE (0b1001) /* 30 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_35_CYCLE (0b1010) /* 35 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_40_CYCLE (0b1011) /* 40 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_45_CYCLE (0b1100) /* 45 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_50_CYCLE (0b1101) /* 50 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_55_CYCLE (0b1110) /* 55 clean channel values outside threshold range generates an interrupt */ #define TCS34725_PERS_60_CYCLE (0b1111) /* 60 clean channel values outside threshold range generates an interrupt */ #define TCS34725_CONFIG (0x0D) #define TCS34725_CONFIG_WLONG (0x02) /* Choose between short and long (12x) wait times via TCS34725_WTIME */ #define TCS34725_CONTROL (0x0F) /* Set the gain level for the sensor */ #define TCS34725_ID (0x12) /* 0x44 = TCS34721/TCS34725, 0x4D = TCS34723/TCS34727 */ #define TCS34725_STATUS (0x13) #define TCS34725_STATUS_AINT (0x10) /* RGBC Clean channel interrupt */ #define TCS34725_STATUS_AVALID (0x01) /* Indicates that the RGBC channels have completed an integration cycle */ #define TCS34725_CDATAL (0x14) /* Clear channel data */ #define TCS34725_CDATAH (0x15) #define TCS34725_RDATAL (0x16) /* Red channel data */ #define TCS34725_RDATAH (0x17) #define TCS34725_GDATAL (0x18) /* Green channel data */ #define TCS34725_GDATAH (0x19) #define TCS34725_BDATAL (0x1A) /* Blue channel data */ #define TCS34725_BDATAH (0x1B) #define TCS34725_INTEGRATIONTIME_2_4MS 0xFF /**< 2.4ms - 1 cycle - Max Count: 1024 */ #define TCS34725_INTEGRATIONTIME_24MS 0xF6 /**< 24ms - 10 cycles - Max Count: 10240 */ #define TCS34725_INTEGRATIONTIME_50MS 0xEB /**< 50ms - 20 cycles - Max Count: 20480 */ #define TCS34725_INTEGRATIONTIME_101MS 0xD5 /**< 101ms - 42 cycles - Max Count: 43008 */ #define TCS34725_INTEGRATIONTIME_154MS 0xC0 /**< 154ms - 64 cycles - Max Count: 65535 */ #define TCS34725_INTEGRATIONTIME_240MS 0x9C /**< 240ms - 100 cycles - Max Count: 65535 */ #define TCS34725_INTEGRATIONTIME_700MS 0x00 /**< 700ms - 256 cycles - Max Count: 65535 */ #define TCS34725_GAIN_1X 0x00 /**< No gain */ #define TCS34725_GAIN_4X 0x01 /**< 4x gain */ #define TCS34725_GAIN_16X 0x02 /**< 16x gain */ #define TCS34725_GAIN_60X 0x03 /**< 60x gain */ /* 定义IIC连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */ #define TCS_DIO_GPIO_PORT GPIOB /* GPIO端口 */ #define TCS_DIO_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */ #define TCS_DIO_GPIO_PIN GPIO_Pin_9 #define TCS_CLK_GPIO_PORT GPIOB /* GPIO端口 */ #define TCS_CLK_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */ #define TCS_CLK_GPIO_PIN GPIO_Pin_8 #define TCS_SCL_H GPIO_SetBits(TCS_CLK_GPIO_PORT,TCS_CLK_GPIO_PIN) #define TCS_SCL_L GPIO_ResetBits(TCS_CLK_GPIO_PORT,TCS_CLK_GPIO_PIN) #define TCS_SDA_H GPIO_SetBits(TCS_DIO_GPIO_PORT,TCS_DIO_GPIO_PIN) #define TCS_SDA_L GPIO_ResetBits(TCS_DIO_GPIO_PORT,TCS_DIO_GPIO_PIN) #define TCS_SDA_READ PBin(9) /******************************************************************************/ #define max3v(v1, v2, v3) ((v1)(v3)?(v3):(v1))) typedef struct{ unsigned short c; //[0-65536] unsigned short r; unsigned short g; unsigned short b; }COLOR_RGBC;//RGBC typedef struct{ unsigned short h; //[0,360] unsigned char s; //[0,100] unsigned char l; //[0,100] }COLOR_HSL;//HSL extern COLOR_RGBC rgb; extern COLOR_HSL hsl; // 端口初始化 u8 TCS34725_Init(void); //RGB转HSL void RGBtoHSL(COLOR_RGBC *Rgb, COLOR_HSL *Hsl); /******************************************************************************* * @brief TCS34725获取各个通道数据 *******************************************************************************/ u8 TCS34725_GetRawData(COLOR_RGBC *rgbc); #endif /* TCS */ tcs3472.c #include "tcs3472.h" #include "delay.h" COLOR_RGBC rgb; COLOR_HSL hsl; //端口初始化 void TCS34725_I2C_Init( void ) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( TCS_DIO_GPIO_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = TCS_DIO_GPIO_PIN | TCS_CLK_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init( TCS_DIO_GPIO_PORT, &GPIO_InitStructure ); GPIO_SetBits(TCS_DIO_GPIO_PORT,TCS_DIO_GPIO_PIN | TCS_CLK_GPIO_PIN); //高电平 } // 配置双向I/O端口为输出态 static void TCS_SDA_OUT() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(TCS_DIO_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = TCS_DIO_GPIO_PIN; // PC.10 DATA GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(TCS_DIO_GPIO_PORT, &GPIO_InitStructure); // 初始化GPIOC.10 } // 配置双向I/O端口为输入态 static void TCS_SDA_IN() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(TCS_DIO_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = TCS_DIO_GPIO_PIN; // PC.10 DATA GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(TCS_DIO_GPIO_PORT, &GPIO_InitStructure); // 初始化GPIOC.10 } /*********************************************/ void TCS34725_I2C_Start() { TCS_SDA_OUT(); TCS_SDA_H; TCS_SCL_H; delay_us(4);//delay_us(4); TCS_SDA_L; delay_us(4);//delay_us(4); TCS_SCL_L; } /*********************************************/ void TCS34725_I2C_Stop() { TCS_SDA_OUT(); TCS_SCL_L; TCS_SDA_L; delay_us(4);//delay_us(4); TCS_SCL_H; TCS_SDA_H; delay_us(4);//delay_us(4); } /*********************************************/ //返回值:1,接收应答失败 // 0,接收应答成功 u8 TCS34725_I2C_Wait_ACK() { u32 t=0; TCS_SDA_IN();//SDA设置为输入 TCS_SDA_H; delay_us(1);//delay_us(1); TCS_SCL_H; delay_us(1);//delay_us(1); while(TCS_SDA_READ) { t++; if(t > 250) { TCS34725_I2C_Stop(); return 1; } } TCS_SCL_L; return 0; } /*********************************************/ //产生ACK应答 void TCS34725_I2C_ACK() { TCS_SCL_L; TCS_SDA_OUT();//sda线输出 TCS_SDA_L; delay_us(2);//delay_us(2); TCS_SCL_H; delay_us(2);//delay_us(2); TCS_SCL_L; } /*********************************************/ //不产生ACK应答 void TCS34725_I2C_NACK() { TCS_SCL_L; TCS_SDA_OUT();//sda线输出 TCS_SDA_H; delay_us(2);//delay_us(2); TCS_SCL_H; delay_us(2);//delay_us(2); TCS_SCL_L; } /*********************************************/ //I2C发送一个字节 void TCS34725_I2C_Send_Byte(u8 byte) { u8 i; TCS_SDA_OUT();//sda线输出 TCS_SCL_L;//拉低时钟开始数据传输 for(i = 0; i < 8; i++) { if(((byte&0x80)>>7)==1)TCS_SDA_H; else TCS_SDA_L; byte c; u8 b = Rgb->b*100/Rgb->c; maxVal = max3v(r,g,b); minVal = min3v(r,g,b); difVal = maxVal-minVal; //计算亮度 Hsl->l = (maxVal+minVal)/2; //[0-100] if(maxVal == minVal)//若r=g=b,灰度 { Hsl->h = 0; Hsl->s = 0; } else { //计算色调 if(maxVal==r) { if(g>=b) Hsl->h = 60*(g-b)/difVal; else Hsl->h = 60*(g-b)/difVal+360; } else { if(maxVal==g)Hsl->h = 60*(b-r)/difVal+120; else if(maxVal==b)Hsl->h = 60*(r-g)/difVal+240; } //计算饱和度 if(Hsl->ls=difVal*100/(maxVal+minVal); //[0-100] else Hsl->s=difVal*100/(200-(maxVal+minVal)); } } /******************************************************************************/  五、参考

TCS34725颜色感应识别模块icon-default.png?t=N7T8https://blog.csdn.net/qq_42250136/article/details/125705450?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171695366516800227437485%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171695366516800227437485&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-125705450-null-null.142%5Ev100%5Epc_search_result_base4&utm_term=TCS34725&spm=1018.2226.3001.4187



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭